///******************** NG.Respate(C)  **********************************
//* 产品名称: Respate 科技
//* 文件名称: signal.c
//* 程序作者: 雷帕特公司(南宫子萍)
//* 程序版本: V1.1														   
//* 编制日期: 2019/1/29
//* 功能描述: 系统日志
//* QQ:	2085827949
//**********************************************************************/

#include <unistd.h>
#include "stdio.h"
#include "stdlib.h"
#include "lap_lib.h"
#include "laperro.h"

#if 0

// 信号阻塞集(信号)
 #include <signal.h>

// int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
// int rt_sigprocmask(int how, const kernel_sigset_t *set,kernel_sigset_t *oldset, size_t sigsetsize);
// int sigprocmask(int how, const old_kernel_sigset_t *set,old_kernel_sigset_t *oldset);


// 查看 进程信号屏蔽字(内核空间)
#include <signal.h>
// int sigpending(sigset_t *set);

// 打印信号屏蔽字
void printf_set()
{
  int i =0;
  sigset_t set;

  sigpending(&set); // 读取信号屏蔽字
  for ( i = 0; i < 32; i++) // 打印未决信号集
  {
    if(sigismember(&set,i)) putchar('1');
    else putchar('0');
  }
  putchar('\n');
}

// 
static int Lap_sigprocmask()
{
  sigset_t set;
  int ret = -1;

  // 1.初始化信号阻塞集
  ret = sigfillset(&set);
  ret = sigdelset(&set,SIGQUIT);  // 不屏蔽SIGQUIT(不可屏蔽信号)
  ret = sigdelset(&set,SIGKILL);  // 不屏蔽SIGKILL(不可屏蔽信号)

  // 2。设置信号阻塞
  ret = sigprocmask(SIG_BLOCK,&set,NULL);

  // 3.循环打印未决屏蔽字 与发送信号
  for(int i=20;i<32;i++)
  {
    if(i==SIGQUIT||i==SIGKILL) continue;

    printf_set();   // 打印信号
    usleep(1000*400);
    raise(i); // 发送信号
  }
  
  return ret;
}

int main(void)
{
  LAP_ErrOutSet(NULL);  // 错误输出 初始化
  Lap_sigprocmask();
}
#endif